package ZengJiHong2.Test1;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
 * @ClassName test1
 * @Author 16799
 * @Date 2025/8/19 15:39
 * @Version 1.0
 * @Description TODO
 *
 * 时间：2025年8月19日15:40:10
 *      近四个小时的视频看完了，本次案例尝试只花了8.16下午的两三个小时
 *      视频从8.17晚上六点，看到8.19上午十一点。现在准备自己重新写一遍
 **/
public class test1 {
    public static List<qiufangs> qiufangsList = new ArrayList<>();
    public static void main(String[] args) {

        //给每个囚犯对象安排编号
        Random r = new Random();

        for (int i = 1; i <= 100; i++) {
            //100个囚犯对象都是有位置的
            int data = r.nextInt(200)+1;
            //确定给的编号不和其他囚犯重复，才能赋值给对象编号
            if (chongfu(data)){
                qiufangs qiufangs = new qiufangs(data,i);
                qiufangsList.add(qiufangs);
            }else {
                i--;
            }
        }
        System.out.println("生成好的100个囚犯对象，编号不重复： "+qiufangsList);


        //[qiufangs{code=58, location=1}]，总是输出集合的第一个元素，错了。错哪里了？:不应该是if (i % 2 == 0)，要改为求余为1
        //设置一个变量记录第几轮删除奇数位
        int a = 0;
        while (qiufangsList.size()>1) {
            a++;
            //不删除qiufangsList里面的元素，而是把偶数位的元素拿出来，放在临时定义的集合里面
            List<qiufangs> tempList = new ArrayList<>();
            for (int i = 0; i < qiufangsList.size(); i++) {
                //错哪里了？:不应该是if (i % 2 == 0)，要改为求余为1
                if (i % 2 == 1) {
                    qiufangs qiufangs = qiufangsList.get(i);
                    tempList.add(qiufangs);
                }
            }
            //遍历完了，输出一下每一轮删除奇数位的集合情况
            System.out.println("第"+a+"次遍历后临时集合的大小："+tempList.size()+",第"+a+"轮的删除情况: "+tempList);
            //遍历完成之后，再把临时变量给qiufangsList，再让qiufangsList集合去遍历
            qiufangsList = tempList;
        }
        System.out.println("遍历到最后只剩下位置为64的了： "+qiufangsList);

        System.out.println("============最后留下来的对象：");
        System.out.println(qiufangsList);
        System.out.println(qiufangsList.get(0));


/*        while (qiufangsList.size()>1){
            //第一个元素是奇数位，会被删除，所以从第二个元素开始遍历，也就是从索引为1的数据开始遍历，每加二就都是偶数位，不用删除
            //定义一个临时集合来存储每一轮的偶数位元素
            List<qiufangs> tempList = new ArrayList<>();
            for (int i = 1; i < qiufangsList.size(); i+=2) {
                qiufangs qiufangs = qiufangsList.get(i);
                tempList.add(qiufangs);
            }
            qiufangsList = tempList;
        }
        System.out.println("遍历到最后只剩下位置为64的了： "+qiufangsList);*/




    }

    public static boolean chongfu(int data){
        for (qiufangs qiufangs : qiufangsList) {
            //list集合里面的每一个对象的编号都不等于刚刚生成的编号，就返回true
            if (qiufangs.getCode()==data){
                return false;
            }
        }
        return true;
    }
}
